<!DOCTYPE html />

<html>
<head>
	<title>ModbusMaster.cs</title>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	<link href="../../nocco.css" rel="stylesheet" media="all" type="text/css" />
	<script src="../../prettify.js" type="text/javascript"></script>
</head>
<body onload="prettyPrint()">
	<div id="container">
		<div id="background"></div>
			<div id="jump_to">
				Jump To &hellip;
				<div id="jump_wrapper">
					<div id="jump_page">
							<a class="source" href="../../nmodbus4/globalsuppressions.html">
								NModbus4\GlobalSuppressions.cs
							</a>
							<a class="source" href="../../nmodbus4/invalidmodbusrequestexception.html">
								NModbus4\InvalidModbusRequestException.cs
							</a>
							<a class="source" href="../../nmodbus4/modbus.html">
								NModbus4\Modbus.cs
							</a>
							<a class="source" href="../../nmodbus4/slaveexception.html">
								NModbus4\SlaveException.cs
							</a>
							<a class="source" href="../../nmodbus4/data/datastore.html">
								NModbus4\Data\DataStore.cs
							</a>
							<a class="source" href="../../nmodbus4/data/datastoreeventargs.html">
								NModbus4\Data\DataStoreEventArgs.cs
							</a>
							<a class="source" href="../../nmodbus4/data/datastorefactory.html">
								NModbus4\Data\DataStoreFactory.cs
							</a>
							<a class="source" href="../../nmodbus4/data/discretecollection.html">
								NModbus4\Data\DiscreteCollection.cs
							</a>
							<a class="source" href="../../nmodbus4/data/imodbusmessagedatacollection.html">
								NModbus4\Data\IModbusMessageDataCollection.cs
							</a>
							<a class="source" href="../../nmodbus4/data/modbusdatacollection.html">
								NModbus4\Data\ModbusDataCollection.cs
							</a>
							<a class="source" href="../../nmodbus4/data/modbusdatatype.html">
								NModbus4\Data\ModbusDataType.cs
							</a>
							<a class="source" href="../../nmodbus4/data/registercollection.html">
								NModbus4\Data\RegisterCollection.cs
							</a>
							<a class="source" href="../../nmodbus4/device/imodbusmaster.html">
								NModbus4\Device\IModbusMaster.cs
							</a>
							<a class="source" href="../../nmodbus4/device/imodbusserialmaster.html">
								NModbus4\Device\IModbusSerialMaster.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusdevice.html">
								NModbus4\Device\ModbusDevice.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusipmaster.html">
								NModbus4\Device\ModbusIpMaster.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusmaster.html">
								NModbus4\Device\ModbusMaster.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusmastertcpconnection.html">
								NModbus4\Device\ModbusMasterTcpConnection.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusserialmaster.html">
								NModbus4\Device\ModbusSerialMaster.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusserialslave.html">
								NModbus4\Device\ModbusSerialSlave.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusslave.html">
								NModbus4\Device\ModbusSlave.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusslaverequesteventargs.html">
								NModbus4\Device\ModbusSlaveRequestEventArgs.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbustcpslave.html">
								NModbus4\Device\ModbusTcpSlave.cs
							</a>
							<a class="source" href="../../nmodbus4/device/modbusudpslave.html">
								NModbus4\Device\ModbusUdpSlave.cs
							</a>
							<a class="source" href="../../nmodbus4/device/tcpconnectioneventargs.html">
								NModbus4\Device\TcpConnectionEventArgs.cs
							</a>
							<a class="source" href="../../nmodbus4/extensions/enron/enronmodbus.html">
								NModbus4\Extensions\Enron\EnronModbus.cs
							</a>
							<a class="source" href="../../nmodbus4/io/emptytransport.html">
								NModbus4\IO\EmptyTransport.cs
							</a>
							<a class="source" href="../../nmodbus4/io/istreamresource.html">
								NModbus4\IO\IStreamResource.cs
							</a>
							<a class="source" href="../../nmodbus4/io/modbusasciitransport.html">
								NModbus4\IO\ModbusAsciiTransport.cs
							</a>
							<a class="source" href="../../nmodbus4/io/modbusiptransport.html">
								NModbus4\IO\ModbusIpTransport.cs
							</a>
							<a class="source" href="../../nmodbus4/io/modbusrtutransport.html">
								NModbus4\IO\ModbusRtuTransport.cs
							</a>
							<a class="source" href="../../nmodbus4/io/modbusserialtransport.html">
								NModbus4\IO\ModbusSerialTransport.cs
							</a>
							<a class="source" href="../../nmodbus4/io/modbustransport.html">
								NModbus4\IO\ModbusTransport.cs
							</a>
							<a class="source" href="../../nmodbus4/io/serialportadapter.html">
								NModbus4\IO\SerialPortAdapter.cs
							</a>
							<a class="source" href="../../nmodbus4/io/streamresourceutility.html">
								NModbus4\IO\StreamResourceUtility.cs
							</a>
							<a class="source" href="../../nmodbus4/io/tcpclientadapter.html">
								NModbus4\IO\TcpClientAdapter.cs
							</a>
							<a class="source" href="../../nmodbus4/io/udpclientadapter.html">
								NModbus4\IO\UdpClientAdapter.cs
							</a>
							<a class="source" href="../../nmodbus4/message/abstractmodbusmessage.html">
								NModbus4\Message\AbstractModbusMessage.cs
							</a>
							<a class="source" href="../../nmodbus4/message/abstractmodbusmessagewithdata.html">
								NModbus4\Message\AbstractModbusMessageWithData.cs
							</a>
							<a class="source" href="../../nmodbus4/message/diagnosticsrequestresponse.html">
								NModbus4\Message\DiagnosticsRequestResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/imodbusmessage.html">
								NModbus4\Message\IModbusMessage.cs
							</a>
							<a class="source" href="../../nmodbus4/message/imodbusrequest.html">
								NModbus4\Message\IModbusRequest.cs
							</a>
							<a class="source" href="../../nmodbus4/message/modbusmessagefactory.html">
								NModbus4\Message\ModbusMessageFactory.cs
							</a>
							<a class="source" href="../../nmodbus4/message/modbusmessageimpl.html">
								NModbus4\Message\ModbusMessageImpl.cs
							</a>
							<a class="source" href="../../nmodbus4/message/readcoilsinputsrequest.html">
								NModbus4\Message\ReadCoilsInputsRequest.cs
							</a>
							<a class="source" href="../../nmodbus4/message/readcoilsinputsresponse.html">
								NModbus4\Message\ReadCoilsInputsResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/readholdinginputregistersrequest.html">
								NModbus4\Message\ReadHoldingInputRegistersRequest.cs
							</a>
							<a class="source" href="../../nmodbus4/message/readholdinginputregistersresponse.html">
								NModbus4\Message\ReadHoldingInputRegistersResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/readwritemultipleregistersrequest.html">
								NModbus4\Message\ReadWriteMultipleRegistersRequest.cs
							</a>
							<a class="source" href="../../nmodbus4/message/slaveexceptionresponse.html">
								NModbus4\Message\SlaveExceptionResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/writemultiplecoilsrequest.html">
								NModbus4\Message\WriteMultipleCoilsRequest.cs
							</a>
							<a class="source" href="../../nmodbus4/message/writemultiplecoilsresponse.html">
								NModbus4\Message\WriteMultipleCoilsResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/writemultipleregistersrequest.html">
								NModbus4\Message\WriteMultipleRegistersRequest.cs
							</a>
							<a class="source" href="../../nmodbus4/message/writemultipleregistersresponse.html">
								NModbus4\Message\WriteMultipleRegistersResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/writesinglecoilrequestresponse.html">
								NModbus4\Message\WriteSingleCoilRequestResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/message/writesingleregisterrequestresponse.html">
								NModbus4\Message\WriteSingleRegisterRequestResponse.cs
							</a>
							<a class="source" href="../../nmodbus4/properties/assemblyinfo.html">
								NModbus4\Properties\AssemblyInfo.cs
							</a>
							<a class="source" href="../../nmodbus4/unme.common/disposableutility.html">
								NModbus4\Unme.Common\DisposableUtility.cs
							</a>
							<a class="source" href="../../nmodbus4/unme.common/eventutility.html">
								NModbus4\Unme.Common\EventUtility.cs
							</a>
							<a class="source" href="../../nmodbus4/unme.common/sequenceutility.html">
								NModbus4\Unme.Common\SequenceUtility.cs
							</a>
							<a class="source" href="../../nmodbus4/utility/discriminatedunion.html">
								NModbus4\Utility\DiscriminatedUnion.cs
							</a>
							<a class="source" href="../../nmodbus4/utility/modbusutility.html">
								NModbus4\Utility\ModbusUtility.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/slaveexceptionfixture.html">
								NModbus4.UnitTests\SlaveExceptionFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/data/datastoreeventargsfixture.html">
								NModbus4.UnitTests\Data\DataStoreEventArgsFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/data/datastorefixture.html">
								NModbus4.UnitTests\Data\DataStoreFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/data/discretecollectionfixture.html">
								NModbus4.UnitTests\Data\DiscreteCollectionFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/data/modbusdatacollectionfixture.html">
								NModbus4.UnitTests\Data\ModbusDataCollectionFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/data/registercollectionfixture.html">
								NModbus4.UnitTests\Data\RegisterCollectionFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/device/modbusmasterfixture.html">
								NModbus4.UnitTests\Device\ModbusMasterFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/device/modbusslavefixture.html">
								NModbus4.UnitTests\Device\ModbusSlaveFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/device/tcpconnectioneventargsfixture.html">
								NModbus4.UnitTests\Device\TcpConnectionEventArgsFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/io/modbusasciitransportfixture.html">
								NModbus4.UnitTests\IO\ModbusAsciiTransportFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/io/modbusrtutransportfixture.html">
								NModbus4.UnitTests\IO\ModbusRtuTransportFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/io/modbusserialtransportfixture.html">
								NModbus4.UnitTests\IO\ModbusSerialTransportFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/io/modbustcptransportfixture.html">
								NModbus4.UnitTests\IO\ModbusTcpTransportFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/io/modbustransportfixture.html">
								NModbus4.UnitTests\IO\ModbusTransportFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/io/udpclientadapterfixture.html">
								NModbus4.UnitTests\IO\UdpClientAdapterFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/diagnosticsrequestresponsefixture.html">
								NModbus4.UnitTests\Message\DiagnosticsRequestResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/messageutility.html">
								NModbus4.UnitTests\Message\MessageUtility.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/modbusmessagefactoryfixture.html">
								NModbus4.UnitTests\Message\ModbusMessageFactoryFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/modbusmessagefixture.html">
								NModbus4.UnitTests\Message\ModbusMessageFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/modbusmessageimplfixture.html">
								NModbus4.UnitTests\Message\ModbusMessageImplFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/modbusmessagewithdatafixture.html">
								NModbus4.UnitTests\Message\ModbusMessageWithDataFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/readcoilsinputsrequestfixture.html">
								NModbus4.UnitTests\Message\ReadCoilsInputsRequestFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/readcoilsinputsresponsefixture.html">
								NModbus4.UnitTests\Message\ReadCoilsInputsResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/readholdinginputregistersrequestfixture.html">
								NModbus4.UnitTests\Message\ReadHoldingInputRegistersRequestFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/readholdinginputregistersresponsefixture.html">
								NModbus4.UnitTests\Message\ReadHoldingInputRegistersResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/readwritemultipleregistersrequestfixture.html">
								NModbus4.UnitTests\Message\ReadWriteMultipleRegistersRequestFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/returnquerydatarequestresponsefixture.html">
								NModbus4.UnitTests\Message\ReturnQueryDataRequestResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/slaveexceptionresponsefixture.html">
								NModbus4.UnitTests\Message\SlaveExceptionResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/writemultiplecoilsrequestfixture.html">
								NModbus4.UnitTests\Message\WriteMultipleCoilsRequestFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/writemultiplecoilsresponsefixture.html">
								NModbus4.UnitTests\Message\WriteMultipleCoilsResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/writemultipleregistersrequestfixture.html">
								NModbus4.UnitTests\Message\WriteMultipleRegistersRequestFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/writemultipleregistersresponsefixture.html">
								NModbus4.UnitTests\Message\WriteMultipleRegistersResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/writesinglecoilrequestresponsefixture.html">
								NModbus4.UnitTests\Message\WriteSingleCoilRequestResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/message/writesingleregisterrequestresponsefixture.html">
								NModbus4.UnitTests\Message\WriteSingleRegisterRequestResponseFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/properties/assemblyinfo.html">
								NModbus4.UnitTests\Properties\AssemblyInfo.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/utility/collectionutilityfixture.html">
								NModbus4.UnitTests\Utility\CollectionUtilityFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/utility/discriminatedunionfixture.html">
								NModbus4.UnitTests\Utility\DiscriminatedUnionFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/utility/modbusutilityfixture.html">
								NModbus4.UnitTests\Utility\ModbusUtilityFixture.cs
							</a>
							<a class="source" href="../../nmodbus4.unittests/utility/serialconnectionfixture.html">
								NModbus4.UnitTests\Utility\SerialConnectionFixture.cs
							</a>
							<a class="source" href="../../samples/driver.html">
								Samples\Driver.cs
							</a>
							<a class="source" href="../../samples/properties/assemblyinfo.html">
								Samples\Properties\AssemblyInfo.cs
							</a>
					</div>
				</div>
			</div>
		<table cellpadding="0" cellspacing="0">
			<thead>
				<tr>
					<th class="docs">
						<h1>ModbusMaster.cs</h1>
					</th>
					<th class="code"></th>
				</tr>
			</thead>
			<tbody>
					<tr id="section_1">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_1">&#182;</a>
							</div>
							
						</td>
						<td class="code">
							<pre><code class='prettyprint'>namespace Modbus.Device
{
    using System;
    using System.Diagnostics.CodeAnalysis;
    using System.Globalization;
    using System.Linq;
    using System.Threading.Tasks;

    using Data;
    using IO;
    using Message;

</code></pre>
						</td>
					</tr>
					<tr id="section_2">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_2">&#182;</a>
							</div>
							<p>Modbus master device.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>    public abstract class ModbusMaster : ModbusDevice, IModbusMaster
    {
        internal ModbusMaster(ModbusTransport transport)
            : base(transport)
        {
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_3">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_3">&#182;</a>
							</div>
							<p>Reads from 1 to 2000 contiguous coils status.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 2000);

            var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, slaveAddress, startAddress, numberOfPoints);
            return PerformReadDiscretes(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_4">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_4">&#182;</a>
							</div>
							<p>Asynchronously reads from 1 to 2000 contiguous coils status.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task&lt;bool[]&gt; ReadCoilsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 2000);

            var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, slaveAddress, startAddress, numberOfPoints);
            return PerformReadDiscretesAsync(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_5">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_5">&#182;</a>
							</div>
							<p>Reads from 1 to 2000 contiguous discrete input status.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 2000);

            var request = new ReadCoilsInputsRequest(Modbus.ReadInputs, slaveAddress, startAddress, numberOfPoints);
            return PerformReadDiscretes(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_6">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_6">&#182;</a>
							</div>
							<p>Asynchronously reads from 1 to 2000 contiguous discrete input status.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task&lt;bool[]&gt; ReadInputsAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 2000);

            var request = new ReadCoilsInputsRequest(Modbus.ReadInputs, slaveAddress, startAddress, numberOfPoints);
            return PerformReadDiscretesAsync(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_7">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_7">&#182;</a>
							</div>
							<p>Reads contiguous block of holding registers.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 125);

            var request = new ReadHoldingInputRegistersRequest(
                Modbus.ReadHoldingRegisters,
                slaveAddress,
                startAddress,
                numberOfPoints);
            return PerformReadRegisters(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_8">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_8">&#182;</a>
							</div>
							<p>Asynchronously reads contiguous block of holding registers.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task&lt;ushort[]&gt; ReadHoldingRegistersAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 125);

            var request = new ReadHoldingInputRegistersRequest(
                Modbus.ReadHoldingRegisters,
                slaveAddress,
                startAddress,
                numberOfPoints);
            return PerformReadRegistersAsync(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_9">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_9">&#182;</a>
							</div>
							<p>Reads contiguous block of input registers.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 125);

            var request = new ReadHoldingInputRegistersRequest(
                Modbus.ReadInputRegisters,
                slaveAddress,
                startAddress,
                numberOfPoints);
            return PerformReadRegisters(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_10">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_10">&#182;</a>
							</div>
							<p>Asynchronously reads contiguous block of input registers.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task&lt;ushort[]&gt; ReadInputRegistersAsync(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            ValidateNumberOfPoints(&quot;numberOfPoints&quot;, numberOfPoints, 125);

            var request = new ReadHoldingInputRegistersRequest(
                Modbus.ReadInputRegisters,
                slaveAddress,
                startAddress,
                numberOfPoints);
            return PerformReadRegistersAsync(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_11">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_11">&#182;</a>
							</div>
							<p>Writes a single coil value.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value)
        {
            var request = new WriteSingleCoilRequestResponse(slaveAddress, coilAddress, value);
            Transport.UnicastMessage&lt;WriteSingleCoilRequestResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_12">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_12">&#182;</a>
							</div>
							<p>Asynchronously writes a single coil value.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task WriteSingleCoilAsync(byte slaveAddress, ushort coilAddress, bool value)
        {
            var request = new WriteSingleCoilRequestResponse(slaveAddress, coilAddress, value);
            return PerformWriteRequestAsync&lt;WriteSingleCoilRequestResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_13">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_13">&#182;</a>
							</div>
							<p>Writes a single holding register.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value)
        {
            var request = new WriteSingleRegisterRequestResponse(slaveAddress, registerAddress, value);
            Transport.UnicastMessage&lt;WriteSingleRegisterRequestResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_14">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_14">&#182;</a>
							</div>
							<p>Asynchronously writes a single holding register.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task WriteSingleRegisterAsync(byte slaveAddress, ushort registerAddress, ushort value)
        {
            var request = new WriteSingleRegisterRequestResponse(slaveAddress, registerAddress, value);
            return PerformWriteRequestAsync&lt;WriteSingleRegisterRequestResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_15">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_15">&#182;</a>
							</div>
							<p>Write a block of 1 to 123 contiguous 16 bit holding registers.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data)
        {
            ValidateData(&quot;data&quot;, data, 123);

            var request = new WriteMultipleRegistersRequest(slaveAddress, startAddress, new RegisterCollection(data));
            Transport.UnicastMessage&lt;WriteMultipleRegistersResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_16">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_16">&#182;</a>
							</div>
							<p>Asynchronously writes a block of 1 to 123 contiguous registers.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task WriteMultipleRegistersAsync(byte slaveAddress, ushort startAddress, ushort[] data)
        {
            ValidateData(&quot;data&quot;, data, 123);

            var request = new WriteMultipleRegistersRequest(slaveAddress, startAddress, new RegisterCollection(data));
            return PerformWriteRequestAsync&lt;WriteMultipleRegistersResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_17">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_17">&#182;</a>
							</div>
							<p>Writes a sequence of coils.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data)
        {
            ValidateData(&quot;data&quot;, data, 1968);

            var request = new WriteMultipleCoilsRequest(slaveAddress, startAddress, new DiscreteCollection(data));
            Transport.UnicastMessage&lt;WriteMultipleCoilsResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_18">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_18">&#182;</a>
							</div>
							<p>Asynchronously writes a sequence of coils.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task WriteMultipleCoilsAsync(byte slaveAddress, ushort startAddress, bool[] data)
        {
            ValidateData(&quot;data&quot;, data, 1968);

            var request = new WriteMultipleCoilsRequest(slaveAddress, startAddress, new DiscreteCollection(data));
            return PerformWriteRequestAsync&lt;WriteMultipleCoilsResponse&gt;(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_19">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_19">&#182;</a>
							</div>
							<p>Performs a combination of one read operation and one write operation in a single Modbus transaction.
   The write operation is performed before the read.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public ushort[] ReadWriteMultipleRegisters(byte slaveAddress, ushort startReadAddress,
            ushort numberOfPointsToRead, ushort startWriteAddress, ushort[] writeData)
        {
            ValidateNumberOfPoints(&quot;numberOfPointsToRead&quot;, numberOfPointsToRead, 125);
            ValidateData(&quot;writeData&quot;, writeData, 121);

            var request = new ReadWriteMultipleRegistersRequest(
                slaveAddress,
                startReadAddress,
                numberOfPointsToRead,
                startWriteAddress,
                new RegisterCollection(writeData));

            return PerformReadRegisters(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_20">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_20">&#182;</a>
							</div>
							<p>Asynchronously performs a combination of one read operation and one write operation in a single Modbus transaction.
   The write operation is performed before the read.</p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        public Task&lt;ushort[]&gt; ReadWriteMultipleRegistersAsync(byte slaveAddress, ushort startReadAddress,
            ushort numberOfPointsToRead, ushort startWriteAddress, ushort[] writeData)
        {
            ValidateNumberOfPoints(&quot;numberOfPointsToRead&quot;, numberOfPointsToRead, 125);
            ValidateData(&quot;writeData&quot;, writeData, 121);

            var request = new ReadWriteMultipleRegistersRequest(
                slaveAddress,
                startReadAddress,
                numberOfPointsToRead,
                startWriteAddress,
                new RegisterCollection(writeData));

            return PerformReadRegistersAsync(request);
        }

</code></pre>
						</td>
					</tr>
					<tr id="section_21">
						<td class="docs">
							<div class="pilwrap">
								<a class="pilcrow" href="#section_21">&#182;</a>
							</div>
							<p>Executes the custom message.</p>

<p><typeparam name="TResponse">The type of the response.</typeparam></p>

						</td>
						<td class="code">
							<pre><code class='prettyprint'>        [SuppressMessage(&quot;Microsoft.Design&quot;, &quot;CA1004:GenericMethodsShouldProvideTypeParameter&quot;)]
        [SuppressMessage(&quot;Microsoft.Usage&quot;, &quot;CA2223:MembersShouldDifferByMoreThanReturnType&quot;)]
        public TResponse ExecuteCustomMessage&lt;TResponse&gt;(IModbusMessage request) where TResponse : IModbusMessage, new()
        {
            return Transport.UnicastMessage&lt;TResponse&gt;(request);
        }

        private static void ValidateData&lt;T&gt;(string argumentName, T[] data, int maxDataLength)
        {
            if (data == null)
                throw new ArgumentNullException(&quot;data&quot;);

            if (data.Length == 0 || data.Length &gt; maxDataLength)
            {
                var msg = string.Format(
                    CultureInfo.InvariantCulture,
                    &quot;The length of argument {0} must be between 1 and {1} inclusive.&quot;,
                    argumentName,
                    maxDataLength);
                throw new ArgumentException(msg);
            }
        }

        private static void ValidateNumberOfPoints(string argumentName, ushort numberOfPoints, ushort maxNumberOfPoints)
        {
            if (numberOfPoints &lt; 1 || numberOfPoints &gt; maxNumberOfPoints)
            {
                var msg = string.Format(
                    CultureInfo.InvariantCulture,
                    &quot;Argument {0} must be between 1 and {1} inclusive.&quot;,
                    argumentName,
                    maxNumberOfPoints);
                throw new ArgumentException(msg);
            }
        }

        private bool[] PerformReadDiscretes(ReadCoilsInputsRequest request)
        {
            ReadCoilsInputsResponse response = Transport.UnicastMessage&lt;ReadCoilsInputsResponse&gt;(request);

            return response.Data.Take(request.NumberOfPoints).ToArray();
        }

        private Task&lt;bool[]&gt; PerformReadDiscretesAsync(ReadCoilsInputsRequest request)
        {
            return Task.Factory.StartNew(() =&gt; PerformReadDiscretes(request));
        }

        private ushort[] PerformReadRegisters(ReadHoldingInputRegistersRequest request)
        {
            ReadHoldingInputRegistersResponse response =
                Transport.UnicastMessage&lt;ReadHoldingInputRegistersResponse&gt;(request);

            return response.Data.Take(request.NumberOfPoints).ToArray();
        }

        private Task&lt;ushort[]&gt; PerformReadRegistersAsync(ReadHoldingInputRegistersRequest request)
        {
            return Task.Factory.StartNew(() =&gt; PerformReadRegisters(request));
        }

        private ushort[] PerformReadRegisters(ReadWriteMultipleRegistersRequest request)
        {
            ReadHoldingInputRegistersResponse response =
                Transport.UnicastMessage&lt;ReadHoldingInputRegistersResponse&gt;(request);

            return response.Data.Take(request.ReadRequest.NumberOfPoints).ToArray();
        }

        private Task&lt;ushort[]&gt; PerformReadRegistersAsync(ReadWriteMultipleRegistersRequest request)
        {
            return Task.Factory.StartNew(() =&gt; PerformReadRegisters(request));
        }

        private Task PerformWriteRequestAsync&lt;T&gt;(IModbusMessage request) where T : IModbusMessage, new()
        {
            return Task.Factory.StartNew(() =&gt; Transport.UnicastMessage&lt;T&gt;(request));
        }
    }
}
</code></pre>
						</td>
					</tr>
			</tbody>
		</table>
	</div>
</body>
</html>
